package br.com.imob.dao;

import br.com.imob.modelo.Login;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 12:09:38 31/01/2011 2011
 *  @version 
 */

public class LoginDao extends GenericDao {
	
	public LoginDao() {  }
	
	public Integer adicionarLogin(Login login) {
		saveOrUpdatePojo(login);
		return login.getLoginId();
	}
	
	public void removerLogin(Login login) {
		removerPojo(login);
	}

	/* Precisa definir o ID */
	public void atualizarLogin(Login recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	
	/**
	 * Editar um Login
	 * @param String oldLogin
	 * @param String newLogin
	 */
	public void atualizarLogin(String tpStr, String oldLogin, String newLogin ) {
		
		if( "login".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldLogin) && oldLogin != null )
					&& ( !"".equalsIgnoreCase(newLogin) && newLogin != null ) ) 
				atualizarLogin( getLoginQNamed(oldLogin), new Login(tpStr, newLogin) );
		}
		
		if( "senha".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldLogin) && oldLogin != null )
					&& ( !"".equalsIgnoreCase(newLogin) && newLogin != null ) ) 
				atualizarLogin( getLoginQNamedSenha(oldLogin), new Login(tpStr, newLogin) );
		}
		if( "email".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldLogin) && oldLogin != null )
					&& ( !"".equalsIgnoreCase(newLogin) && newLogin != null ) ) 
				atualizarLogin( getLoginQNamedEmail(oldLogin), new Login(tpStr, newLogin) );
		}
		if( "site".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldLogin) && oldLogin != null )
					&& ( !"".equalsIgnoreCase(newLogin) && newLogin != null ) ) 
				atualizarLogin( getLoginQNamedSite(oldLogin), new Login(tpStr, newLogin) );
		}
	}
	
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarLogin(Login recuperar, Login alterar) {
		recuperar = retriveLogin(recuperar);
		
		if(alterar.getLogin() != null)
			recuperar.setLogin(alterar.getLogin());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Login
	protected Login retriveLogin(Login recuperar) {
		if( recuperar.getLoginId() != null )
			return getLogin( recuperar.getLoginId() );
		 
		if( recuperar.getLogin() != null )
			return getLoginQNamed( recuperar.getLogin() );
		
		if( recuperar.getSenha() != null )
			return getLoginQNamedSenha( recuperar.getSenha() );
		
		if( recuperar.getEmail() != null )
			return getLoginQNamedEmail( recuperar.getEmail() );
		
		if( recuperar.getSite() != null )
			return getLoginQNamedSite( recuperar.getSite() );
		
		return recuperar;
	}
	
	
	public boolean verificaLoginBD( Login log ) {
		
		if( getLoginByLogin( log ) != null	)
			return true;
		
		return false;
	}
	
	
//	Consultas
	public Login getLogin(Integer key) {
		return getPojoByID(Login.class, key);
	}
	public Login getLoginByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Login getLoginQNamed(String fltrLogin) {
		return getPojoByQNamed("Login.findByLogin", fltrLogin);
	}
	public Login getLoginQNamedSenha(String fltrSenha) {
		return getPojoByQNamed("Login.findBySenha", fltrSenha);
	}
	public Login getLoginQNamedEmail(String fltrEmail) {
		return getPojoByQNamed("Login.findByEmail", fltrEmail);
	}
	public Login getLoginQNamedSite(String fltrSite) {
		return getPojoByQNamed("Login.findBySite", fltrSite);
	}
	
	public Login getLoginByLogin(Login login) {
		String query = "FROM Login WHERE login = '" + login.getLogin() + "' AND senha = '"+login.getSenha()+"'";
		return getPojoByQry(query);
	}
	
	public List<Login> getLogins() {
		return (List<Login>) getALL(Login.class);
	}
	public List<Login> getLoginsQNamedPRX(String fltrLogin) {
		return getListByQNamedPRX("Login.findLikeByLogin", fltrLogin);
	}
	public List<Login> getLoginsQNamedEmailPRX(String fltrEmail) {
		return getListByQNamedPRX("Login.findLikeByLogin", fltrEmail);
	}
	public List<Login> getLoginsQNamedSitePRX(String fltrSite) {
		return getListByQNamedPRX("Login.findLikeByLogin", fltrSite);
	}
	
	public List<Login> getLoginsByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}

}